package com.youme.tools.cg.util;

public final class NameFormatUtil {
  NameFormatUtil() {}

  /** 下划线 */
  static final String UNDER_LINE = "_";

  /**
   * 按大驼峰命名法格式化字段
   * 
   * @Title: formatClassName
   * @Description: 按大驼峰命名法格式化的字段<br/>
   *               如：formatClassName("user_gender") = "UserGender"
   * @param className 类名，字段名
   * @return 按大驼峰命名法格式化的字段
   */
  public static String formatClassName(String className) {
    if (className.contains(UNDER_LINE)) {
      String[] names = className.split(UNDER_LINE);
      StringBuilder name = new StringBuilder();
      for (String str : names) {
        name.append(format2Hump(str));
      }
      return name.toString();
    } else {
      return format2Hump(className);
    }
  }

  /**
   * 按小驼峰命名法格式化字段
   * 
   * @Title: formatFieldName
   * @Description: 按小驼峰命名法格式化的字段<br/>
   *               如：formatFieldName("user_gender") = "userGender"
   * @param fieldName 类名，字段名
   * @return 按小驼峰命名法格式化的字段
   */
  public static String formatFieldName(String fieldName) {
    if (fieldName.contains(UNDER_LINE)) {
      String[] names = fieldName.split(UNDER_LINE);
      StringBuilder name = new StringBuilder();
      for (int i = 0; i < names.length; i++) {
        String str = names[i];
        if (i == 0) {
          name.append(str.toLowerCase());
        } else {
          name.append(format2Hump(str));
        }
      }
      return name.toString();
    } else {
      return fieldName.toLowerCase();
    }
  }

  /**
   * 将字符串第一个字母大写，其余字母小写
   * 
   * @Title: format2Hump
   * @Description: 将字符串第一个字母大写，其余字母小写<br/>
   *               如：format2Hump("hEllO") = "Hello"
   * @param name 要转换的字符串
   * @return 转换后的字符串
   */
  private static String format2Hump(String name) {
    if (StringUtil.isEmpty(name)) {
      return null;
    }
    String first = name.substring(0, 1);
    String other = name.substring(1);
    return first.toUpperCase() + other.toLowerCase();
  }

}
